#include <iostream>
#include "Vec3.h"
#include "Triangle.h"
using namespace std;

/**
 * Constructor con los 3 puntos
 */
Triangle::Triangle (const Vec3 &v1, const Vec3 &v2, const Vec3 &v3) {
	_v1 = new Vec3(v1.getX(), v1.getY(), v1.getZ());
	_v2 = new Vec3(v2.getX(), v2.getY(), v2.getZ());
	_v3 = new Vec3(v3.getX(), v3.getY(), v3.getZ());
}

/**
 * Constructor que recibe un objeto Triangle
 */
Triangle::Triangle (const Triangle &t) {
	_v1 = new Vec3(t.getV1().getX(), t.getV1().getY(), t.getV1().getZ());
	_v2 = new Vec3(t.getV2().getX(), t.getV2().getY(), t.getV2().getZ());
	_v3 = new Vec3(t.getV3().getX(), t.getV3().getY(), t.getV3().getZ());
}

/**
 * Destructor
 */
Triangle::~Triangle () {
	delete _v1;
	delete _v2;
	delete _v3;
}

Vec3 Triangle::getV1 () const {
	return *_v1;
}

Vec3 Triangle::getV2 () const {
	return *_v2;
}

Vec3 Triangle::getV3 () const {
	return *_v3;
}

void Triangle::setV1(const Vec3 &v1) {
	delete _v1;
	_v1 = new Vec3(v1.getX(), v1.getY(), v1.getZ());
}

/**
 * Operacion igual
 */
Triangle& Triangle::operator= (const Triangle &t) {
	Triangle *triAux = new Triangle(t);
	return *triAux;
}

/**
 * Muestra por pantalla una cadena formada por los puntos que forman el triángulo
 */
void Triangle::toString(){
	cout << "Triángulo: " << endl;
	_v1->toString();
	_v2->toString();
	_v3->toString();
	cout << "Fin de triángulo: " << endl;
}

